﻿#pragma once

namespace ace{

	enum eKeys
	{
		ACE_KEY_UNKNOWN = 0x00,
		ACE_KEY_SPACE = 0x01,
		ACE_KEY_APOSTROPHE = 0x02,
		ACE_KEY_COMMA = 0x03,
		ACE_KEY_MINUS = 0x04,
		ACE_KEY_PERIOD = 0x05,
		ACE_KEY_SLASH = 0x06,
		ACE_KEY_0 = 0x07,
		ACE_KEY_1 = 0x08,
		ACE_KEY_2 = 0x09,
		ACE_KEY_3 = 0x0a,
		ACE_KEY_4 = 0x0b,
		ACE_KEY_5 = 0x0c,
		ACE_KEY_6 = 0x0d,
		ACE_KEY_7 = 0x0e,
		ACE_KEY_8 = 0x0f,
		ACE_KEY_9 = 0x10,
		ACE_KEY_SEMICOLON = 0x11,
		ACE_KEY_EQUAL = 0x12,
		ACE_KEY_A = 0x13,
		ACE_KEY_B = 0x14,
		ACE_KEY_C = 0x15,
		ACE_KEY_D = 0x16,
		ACE_KEY_E = 0x17,
		ACE_KEY_F = 0x18,
		ACE_KEY_G = 0x19,
		ACE_KEY_H = 0x1a,
		ACE_KEY_I = 0x1b,
		ACE_KEY_J = 0x1c,
		ACE_KEY_K = 0x1d,
		ACE_KEY_L = 0x1e,
		ACE_KEY_M = 0x1f,
		ACE_KEY_N = 0x20,
		ACE_KEY_O = 0x21,
		ACE_KEY_P = 0x22,
		ACE_KEY_Q = 0x23,
		ACE_KEY_R = 0x24,
		ACE_KEY_S = 0x25,
		ACE_KEY_T = 0x26,
		ACE_KEY_U = 0x27,
		ACE_KEY_V = 0x28,
		ACE_KEY_W = 0x29,
		ACE_KEY_X = 0x2a,
		ACE_KEY_Y = 0x2b,
		ACE_KEY_Z = 0x2c,
		ACE_KEY_LEFT_BRACKET = 0x2d,
		ACE_KEY_BACKSLASH = 0x2e,
		ACE_KEY_RIGHT_BRACKET = 0x2f,
		ACE_KEY_GRAVE_ACCENT = 0x30,
		ACE_KEY_WORLD_1 = 0x31,
		ACE_KEY_WORLD_2 = 0x32,
		ACE_KEY_ESCAPE = 0x33,
		ACE_KEY_ENTER = 0x34,
		ACE_KEY_TAB = 0x35,
		ACE_KEY_BACKSPACE = 0x36,
		ACE_KEY_INSERT = 0x37,
		ACE_KEY_DELETE = 0x38,
		ACE_KEY_RIGHT = 0x39,
		ACE_KEY_LEFT = 0x3a,
		ACE_KEY_DOWN = 0x3b,
		ACE_KEY_PAGE_UP = 0x3c,
		ACE_KEY_PAGE_DOWN = 0x3d,
		ACE_KEY_HOME = 0x3e,
		ACE_KEY_END = 0x3f,
		ACE_KEY_CAPS_LOCK = 0x40,
		ACE_KEY_SCROLL_LOCK = 0x41,
		ACE_KEY_NUM_LOCK = 0x42,
		ACE_KEY_PRINT_SCREEN = 0x43,
		ACE_KEY_PAUSE = 0x44,
		ACE_KEY_F1 = 0x45,
		ACE_KEY_F2 = 0x46,
		ACE_KEY_F3 = 0x47,
		ACE_KEY_F4 = 0x48,
		ACE_KEY_F5 = 0x49,
		ACE_KEY_F6 = 0x4a,
		ACE_KEY_F7 = 0x4b,
		ACE_KEY_F8 = 0x4c,
		ACE_KEY_F9 = 0x4d,
		ACE_KEY_F10 = 0x4e,
		ACE_KEY_F11 = 0x4f,
		ACE_KEY_F12 = 0x50,
		ACE_KEY_F13 = 0x51,
		ACE_KEY_F14 = 0x52,
		ACE_KEY_F15 = 0x53,
		ACE_KEY_F16 = 0x54,
		ACE_KEY_F17 = 0x55,
		ACE_KEY_F18 = 0x56,
		ACE_KEY_F19 = 0x57,
		ACE_KEY_F20 = 0x58,
		ACE_KEY_F21 = 0x59,
		ACE_KEY_F22 = 0x5a,
		ACE_KEY_F23 = 0x5b,
		ACE_KEY_F24 = 0x5c,
		ACE_KEY_F25 = 0x5d,
		ACE_KEY_KP_0 = 0x5e,
		ACE_KEY_KP_1 = 0x5f,
		ACE_KEY_KP_2 = 0x60,
		ACE_KEY_KP_3 = 0x61,
		ACE_KEY_KP_4 = 0x62,
		ACE_KEY_KP_5 = 0x63,
		ACE_KEY_KP_6 = 0x64,
		ACE_KEY_KP_7 = 0x65,
		ACE_KEY_KP_8 = 0x66,
		ACE_KEY_KP_9 = 0x67,
		ACE_KEY_KP_DECIMAL = 0x68,
		ACE_KEY_KP_DIVIDE = 0x69,
		ACE_KEY_KP_MULTIPLY = 0x6a,
		ACE_KEY_KP_SUBTRACT = 0x6b,
		ACE_KEY_KP_ADD = 0x6c,
		ACE_KEY_KP_ENTER = 0x6d,
		ACE_KEY_KP_EQUAL = 0x6e,
		ACE_KEY_LEFT_SHIFT = 0x6f,
		ACE_KEY_LEFT_CONTROL = 0x70,
		ACE_KEY_LEFT_ALT = 0x71,
		ACE_KEY_LEFT_SUPER = 0x72,
		ACE_KEY_RIGHT_SHIFT = 0x73,
		ACE_KEY_RIGHT_CONTROL = 0x74,
		ACE_KEY_RIGHT_ALT = 0x75,
		ACE_KEY_RIGHT_SUPER = 0x76,
		ACE_KEY_MENU = 0x77,
		ACE_KEY_LAST = 0x78,
		MAX = 0xfff
	};

	enum eKeyboardButtonState
	{
		KEYBOARD_PUSH, KEYBOARD_PULL, KEYBOARD_HOLD, KEYBOARD_FREE
	};

	class Keyboard
	{
	public:
		virtual const eKeyboardButtonState GetKeyState(eKeys key) = 0;
	};

};